﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Osiptel.HECO.BE;
using System.Data.OracleClient;
using System.Data;

namespace Osiptel.HECO.DL
{
    public class GrupoDetalleDL
    {
        public int mInsertar(GrupoDetalleBE grupo)
        {
            try
            {
                Int32 id = 0;
                using (OracleCommand cmd = new OracleCommand())
                {
                    cmd.CommandText = "PKG_HECO_GLOBAL.SP_INSERTAR_GRUPO_DETALLE";
                    cmd.CommandType = CommandType.StoredProcedure;

                    OracleParameter prm1 = new OracleParameter("PIDCOMPONENTE", OracleType.Int32);
                    OracleParameter prm2 = new OracleParameter("PIDGRUPO", OracleType.Int32);
                    OracleParameter prm3 = new OracleParameter("PCANTIDAD", OracleType.Int32);
                    OracleParameter prm4 = new OracleParameter("PPRECIOTOTALMAXIMO", OracleType.Number);
                    OracleParameter prm5 = new OracleParameter("PPRECIOTOTALMINIMO", OracleType.Number);
                    OracleParameter prm6 = new OracleParameter("PUSUCRE", OracleType.VarChar);
                    OracleParameter prm7 = new OracleParameter("PIDGRUPODETALLE", OracleType.Int32);

                    prm1.Direction = ParameterDirection.Input;
                    prm2.Direction = ParameterDirection.Input;
                    prm3.Direction = ParameterDirection.Input;
                    prm4.Direction = ParameterDirection.Input;
                    prm5.Direction = ParameterDirection.Input;
                    prm6.Direction = ParameterDirection.Input;    
                    prm7.Direction = ParameterDirection.Output;

                    prm1.Value = grupo.IdComponente;
                    prm2.Value = grupo.IdGrupo;
                    prm3.Value = grupo.Cantidad;
                    prm4.Value = grupo.PrecioTotalMaximo;
                    prm5.Value = grupo.PrecioTotalMinimo;
                    prm6.Value = grupo.UsuCre;                    
                    prm7.Value = grupo.IdGrupoDetalle;

                    cmd.Parameters.Add(prm1);
                    cmd.Parameters.Add(prm2);
                    cmd.Parameters.Add(prm3);
                    cmd.Parameters.Add(prm4);
                    cmd.Parameters.Add(prm5);
                    cmd.Parameters.Add(prm6);
                    cmd.Parameters.Add(prm7);

                    using (DL_CONEXION NewConexion = new DL_CONEXION())
                    {
                        int ret = NewConexion.ejecutaSQL(cmd);
                        id = Convert.ToInt32(Convert.ToString(cmd.Parameters["PIDGRUPODETALLE"].Value));
                        return id;
                    }                    
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public List<GrupoDetalleBE> Obtener(int pIdGrupo)
        {
            try
            {
                using (OracleCommand cmd = new OracleCommand())
                {
                    cmd.CommandText = "PKG_HECO_GLOBAL.SP_OBTENER_GRUPODETALLE";
                    cmd.CommandType = System.Data.CommandType.StoredProcedure;

                    OracleParameter prm1 = new OracleParameter("pIdGrupo", OracleType.Number);
                    OracleParameter prm2 = new OracleParameter("oListado", OracleType.Cursor);
                    prm1.Direction = ParameterDirection.Input;
                    prm2.Direction = ParameterDirection.Output;
                    prm1.Value = pIdGrupo;
                    cmd.Parameters.Add(prm1);
                    cmd.Parameters.Add(prm2);

                    using (DL_CONEXION NewDL_CONEXION = new DL_CONEXION())
                    {
                        try
                        {
                            NewDL_CONEXION.retOpen();
                            cmd.Connection = NewDL_CONEXION.retConexion();


                            GrupoDetalleBE objGrupoDetalleBE;
                            List<GrupoDetalleBE> llstGrupoDetalleBE = new List<GrupoDetalleBE>();
                            using (OracleDataReader objDRConsulta = cmd.ExecuteReader())
                            {
                                while (objDRConsulta.Read())
                                {
                                    objGrupoDetalleBE = new GrupoDetalleBE();
                                    objGrupoDetalleBE.IdGrupoDetalle = Convert.ToInt32(objDRConsulta["IDGRUPODETALLE"]);
                                    objGrupoDetalleBE.IdComponente = Convert.ToInt32(objDRConsulta["IDCOMPONENTE"]);
                                    objGrupoDetalleBE.IdComponenteDesc = Convert.ToString(objDRConsulta["IDCOMPONENTEDESC"]);
                                    objGrupoDetalleBE.IdGrupo = Convert.ToInt32(objDRConsulta["IDCOMPONENTE"]);
                                    objGrupoDetalleBE.Cantidad = Convert.ToInt32(objDRConsulta["CANTIDAD"]);
                                    objGrupoDetalleBE.PrecioTotalMaximo = Convert.ToDecimal(objDRConsulta["PRECIOTOTALMAXIMO"]);
                                    objGrupoDetalleBE.PrecioTotalMinimo = Convert.ToDecimal(objDRConsulta["PRECIOTOTALMINIMO"]);
                                    objGrupoDetalleBE.PrecioMaximo = Convert.ToDecimal(objDRConsulta["PRECIOMAXIMO"]);
                                    objGrupoDetalleBE.PrecioMinimo = Convert.ToDecimal(objDRConsulta["PRECIOMINIMO"]);
                                    objGrupoDetalleBE.UsuCre = Convert.ToString(objDRConsulta["USUCRE"]);
                                    objGrupoDetalleBE.P01UnidadDesc = Convert.ToString(objDRConsulta["P01UNIDADDESC"]);
                                    objGrupoDetalleBE.P07ClaseDesc = Convert.ToString(objDRConsulta["P07CLASEDESC"]);
                                    objGrupoDetalleBE.FecCre = Convert.ToDateTime(objDRConsulta["FECCRE"]);
                                    objGrupoDetalleBE.UsuMod = Convert.ToString(objDRConsulta["USUMOD"]);                                    
                                    objGrupoDetalleBE.FecMod = Convert.ToDateTime(objDRConsulta["FECMOD"]);

                                    llstGrupoDetalleBE.Add(objGrupoDetalleBE);
                                }
                                objDRConsulta.Close();
                            }

                            NewDL_CONEXION.retClose();
                            return llstGrupoDetalleBE;
                        }
                        catch (Exception ex)
                        {
                            throw ex;
                        }

                        finally
                        {
                            if (NewDL_CONEXION.conexion.State == ConnectionState.Open) NewDL_CONEXION.retClose();

                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public GrupoDetalleBE ObtenerPreciosOtrosPorIdProy(int PidProyecto)
        {
            try
            {
                using (OracleCommand cmd = new OracleCommand())
                {
                    cmd.CommandText = "PKG_HECO_GLOBAL.SP_CALCULAR_PRECIOSOTROS";
                    cmd.CommandType = System.Data.CommandType.StoredProcedure;

                    OracleParameter prm1 = new OracleParameter("PidProyecto", OracleType.Number);
                    OracleParameter prm2 = new OracleParameter("oListado", OracleType.Cursor);
                    prm1.Direction = ParameterDirection.Input;
                    prm2.Direction = ParameterDirection.Output;
                    prm1.Value = PidProyecto;
                    cmd.Parameters.Add(prm1);
                    cmd.Parameters.Add(prm2);

                    using (DL_CONEXION NewDL_CONEXION = new DL_CONEXION())
                    {
                        try
                        {
                            NewDL_CONEXION.retOpen();
                            cmd.Connection = NewDL_CONEXION.retConexion();
                            GrupoDetalleBE objConsultaBE= new GrupoDetalleBE();
                            using (OracleDataReader oRead = cmd.ExecuteReader())
                            {
                                if (oRead.Read())
                                {
                                    objConsultaBE.PrecioTotalMaximo = Convert.ToInt32(oRead.GetValue(oRead.GetOrdinal("PRECIOTOTALMAXIMO")));
                                    objConsultaBE.PrecioTotalMinimo = Convert.ToInt32(oRead.GetValue(oRead.GetOrdinal("PRECIOTOTALMINIMO")));
                                   
                                }
                                oRead.Close();
                            }

                            NewDL_CONEXION.retClose();
                            return objConsultaBE;
                        }
                        catch (Exception ex)
                        {
                            throw ex;
                        }

                        finally
                        {
                            if (NewDL_CONEXION.conexion.State == ConnectionState.Open) NewDL_CONEXION.retClose();

                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void mEliminar(int idProyecto, int idGrupo, GrupoDetalleBE gdBorrar)
        {
            try
            {

                using (OracleCommand cmd = new OracleCommand())
                {
                    cmd.CommandText = "PKG_HECO_GLOBAL.SP_ELIMINAR_GRUPO_DETALLE";
                    cmd.CommandType = CommandType.StoredProcedure;

                    OracleParameter prm1 = new OracleParameter("PIDPROYECTO", OracleType.Int32);
                    OracleParameter prm2 = new OracleParameter("PIDGRUPO", OracleType.Int32);
                    OracleParameter prm3 = new OracleParameter("PIDGRUPODETALLE", OracleType.Int32);
                    OracleParameter prm4 = new OracleParameter("PUSUARIOMOD", OracleType.VarChar);
                    OracleParameter prm5 = new OracleParameter("PIPMOD", OracleType.VarChar);

                    prm1.Direction = ParameterDirection.Input;
                    prm1.Value = idProyecto;
                    prm2.Direction = ParameterDirection.Input;
                    prm2.Value = idGrupo;
                    prm3.Direction = ParameterDirection.Input;
                    prm3.Value = gdBorrar.IdGrupoDetalle;
                    prm4.Direction = ParameterDirection.Input;
                    prm4.Value = gdBorrar.UsuMod;
                    prm5.Direction = ParameterDirection.Input;
                    prm5.Value = gdBorrar.IpMod;
                    cmd.Parameters.Add(prm1);
                    cmd.Parameters.Add(prm2);
                    cmd.Parameters.Add(prm3);
                    cmd.Parameters.Add(prm4);
                    cmd.Parameters.Add(prm5);

                    using (DL_CONEXION NewConexion = new DL_CONEXION())
                    {
                        int ret = NewConexion.ejecutaSQL(cmd);
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        
        }
    }
}

